#include <iostream>
#include <future>
#include <memory>
#include <thread>

int Add(int x, int y)
{
    std::cout << "init add" << std::endl;
    return x + y;
}

int main()
{
    // 封装任务
    auto task = std::make_shared<std::packaged_task<int(int, int)>>(Add);
    // 获取任务包关联的future对象
    std::future<int> res = task->get_future();
    // 执行任务
    std::thread th([task](){
        (*task)(1, 2);
    });
    // 获取结果
    std::cout << res.get() << std::endl;
    th.join();
    return 0;
}